#!/bin/bash
set -e

echo Running: flake8 python linting

cd $(dirname $0)/../tests/integration
tox -e flake8

cd ../..

if ! command -v golangci-lint; then	echo Running: go fmt	
    echo Skipping validation: no golangci-lint available	test -z "$(go fmt ./... | tee /dev/stderr)"
    exit	
fi	

echo Running: golangci-lint
golangci-lint run

echo Tidying up modules
go mod tidy

echo Verifying modules
go mod verify

if [ -n "$(git status --porcelain --untracked-files=no)" ]; then
  echo "Encountered dirty repo!"
  exit 1
fi

# Check diff between ./go.mod and ./pkg/apis/go.mod
badmodule="false"
while read -r module tag; do
  # Get tag from module in ./go.mod
  roottag=$(cat go.mod | sed '1,/require/d' | grep "${module} " | awk '{ print $2 }')
  echo "${module}:"
  echo "${tag} (./pkg/apis/go.mod)"
  echo "${roottag} (./go.mod)"
  # Compare with tag from module in ./pkg/apis/go.mod
  if [[ "${tag}" != "${roottag}" ]]; then
    echo "${module} is different ("${tag}" vs "${roottag}")"
    badmodule="true"
  fi
done <<< $(cat pkg/apis/go.mod | sed '1,/require/d' | head -n -1 | grep -v indirect | grep rancher |  awk '{ print $1,$2 }')

if [[ "${badmodule}" == "true" ]]; then
  echo "Diff found between ./go.mod and ./pkg/apis/go.mod"
  exit 1
fi
